﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Financial_Assistant
{
    /// <summary>
    /// Логика взаимодействия для PlanCardWindow.xaml
    /// </summary>
    public partial class PlanCardWindow : Window
    {
        private string _connectionString =
                @"Data Source = CHRISTINABEIM\SQLEXPRESS; Initial Catalog=Financial_Assistant; Trusted_Connection=True;"; //( ip-сервера, имя БД, разрешение соединения)

        private string UserID = String.Empty; // нужен для проверки наличия такищ счетов для данного пользователя
        private string PlanID = String.Empty; //ID записи
        private bool type = false; // определяет расход или доход
        private bool ActionType = true; // true - добавление, false - изменение

        public PlanCardWindow(MyBoolAction _type, string userID, string planID, string date, string countName, string summ,
            string category, string period, string definition, bool _actionType)
        {
            InitializeComponent();

            UserID = userID;
            ActionType = _actionType;
            PlanID = planID;

            DataBox.Text = date;
            SumBox.Text = summ;
            DefinitionBox.Text = definition;

            //если type=true то доход иначе расход
            if (_type == MyBoolAction.Profit)
            {
                this.Title = "Карточка планирования дохода";
                type = true;
            }
            else
            {
                this.Title = "Карточка планирования расхода";
                type = false;
            }

            //при инициализации загрузить данные в комбобокс
            LoadCombobox();
            //поставить значения для обоих комбобоксов, равное пришедшему в конструктор
            CategoryComboBox.SelectedItem = category;
            CountComboBox.SelectedItem = countName;
        }

        private void LoadCombobox()
        {
            //Очищаем комбобокс категорий
            CategoryComboBox.Items.Clear();
            //List<string> categoryList = new List<string>();

            StringBuilder query = new StringBuilder();
            query.Append("SELECT Наименование FROM [Используемые категории] where [ID пользователя] = '");
            query.Append(UserID + "' and Вид = '");
            query.Append(type + "'");

            SqlConnection connection = new SqlConnection(_connectionString);
            connection.Open(); // открыть считывание

            SqlCommand command = new SqlCommand(query.ToString(), connection);
            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                for (int j = 0; j < reader.FieldCount; j++)
                {
                    CategoryComboBox.Items.Add(reader[j].ToString());
                }
            }
            reader.Dispose();
            command.Dispose();

            //Аналогично для счета
            CountComboBox.Items.Clear();
            query.Clear();
            query.Append("SELECT Наименование FROM Счета where [ID пользователя] = '");
            query.Append(UserID + "'");

            command = new SqlCommand(query.ToString(), connection);
            reader = command.ExecuteReader();
            while (reader.Read())
            {
                for (int j = 0; j < reader.FieldCount; j++)
                {
                    CountComboBox.Items.Add(reader[j].ToString());
                }
            }
            reader.Dispose();
            command.Dispose();
            connection.Dispose();
        }


        private void OKBut_Click(object sender, RoutedEventArgs e)
        {

        }

        private void CancelBut_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        //доделать обновления данных в комбобоксе
        private void AddPerson_Category(object sender, MouseButtonEventArgs e)
        {
            MyBoolAction _type = MyBoolAction.Consume;
            if (type)
            {
                _type = MyBoolAction.Profit;
            }
            else _type = MyBoolAction.Consume;

            CategoryCard categoryWin = new CategoryCard(UserID, String.Empty, String.Empty, _type, true);
            //false - расход, true - доход. Второй bool значит true - добавление, false изменение, которое нам не нужно
            categoryWin.ShowDialog();
            //обновить данные в комбобоксе
            //LoadCombobox();
        }

        private void AddCount_MouseDown(object sender, MouseButtonEventArgs e)
        {
            CountCard countWin = new CountCard(UserID, String.Empty, String.Empty, String.Empty, true);
            //true - добавление счета
            countWin.ShowDialog();
        }

        private void CalcImage_MouseDown(object sender, MouseButtonEventArgs e)
        {
            //но идет привязка к операционной системе!! просто писать свой калькулятор не хочу
            System.Diagnostics.Process externalProg = new System.Diagnostics.Process();
            externalProg.StartInfo.FileName = "calc.exe";
            externalProg.Start();
        }
    }
}
